package com.wjm.core;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Data:2022年08月03日
 * Author:wjm
 * Content:
 *
 *
 *  作用：
 *      1）作为服务端的容器，赋值与客户端交互（用来处理请求的）
 *
 *      2）完成与客户端TCP连接
 *
 *      3）基于Http协议，与客户端进行应用交互，使得客户端：浏览器，可以访问到该服务器部署的不同网络应用资源
 *      包括：页面，数据资源，功能等
 *
 *      4）可以管理部署多个不同的网络应用
 *
 */
public class WebServer {
    private ServerSocket serverSocket;


    public WebServer(){
        //通过ServerSocket申请端口号
        try {
            System.out.println("正在申请端口号...");
            serverSocket = new ServerSocket(8080);
            System.out.println("服务器已启动");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * WebServer要执行的必要动作
     */
    public void start(){
        //开启客户端监听
        try {
            System.out.println("等待客户端连接...");
            //一个socket封装着一个客户端发送过来的所有数据
            Socket socket = serverSocket.accept();
            System.out.println("一个客户端已连接");

            //将socket交给Runnable接口的实现类RequestHandle，来实现多线程
            RequestHandle requestHandle = new RequestHandle(socket);

            /*
            * 如果有多个客户端同时发送请求，那么我们就需要用多线程来做
            * */
            //创建线程对象
            Thread thread = new Thread(requestHandle);
            //启动线程
            thread.start();


        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        WebServer webServer = new WebServer();
        webServer.start();
    }

}
